iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0

上傳圖片跟 Markdown 一樣也是沒看過別人怎麼寫,就猜不到怎麼做的東東

sendPhoto

https://core.telegram.org/bots/api#sendphoto
https://ithelp.ithome.com.tw/upload/images/20210930/20132916Yf9LbRjSgZ.jpg
這邊可以看到很多參數昨天都有出現過,但是少了 text 多了 caption,其實 caption 就是跟圖片一起發送的 text 啦,而且這個是可以不填的

https://core.telegram.org/bots/api#sending-files
https://ithelp.ithome.com.tw/upload/images/20210930/20132916P0JwIaNutQ.png
Telegram Bot API 提供了三種傳送檔案的方式

  1. file_id 這個是傳送檔案時會附加在檔案上的訊息,機器人可以透過這個再次傳送
  2. URL 這很容易理解,就是檔案的網址
  3. HTTP POST 最後這個就是沒看過就很難成功的,要從自己電腦把檔案上傳上去

那就從最難的開始吧


HTTP POST 上傳圖片

首先開啟程式來到 apiRequestJson() 的地方

先把 json_encode() 刪除,這個其實有點多餘,不需要這個也能運作,加了反而會在需要傳送檔案時出錯

還有把 application/json 改成 multipart/form-data,用 JSON 的話 TG 伺服器會不接受檔案

完成後像這個樣子:
https://ithelp.ithome.com.tw/upload/images/20210930/201329169HEsAUz40f.png
接著把 Long Polling 用的那段程式註解,在最底下加上這坨程式,這次不能偷懶 response 也要記得打

檔案路徑的話你就自己找張圖片填,curl_file_create() 是一個特殊的檔案讀取函式,上傳檔案一定要經過他
https://ithelp.ithome.com.tw/upload/images/20210930/20132916RjZzmwZTV3.png
接著按下執行,成功的話就會看到機器人發給你一張圖片
https://ithelp.ithome.com.tw/upload/images/20210930/20132916ISOfvv6rk4.png
還有終端機的一大坨訊息
https://ithelp.ithome.com.tw/upload/images/20210930/20132916zL4epeC3CO.png
這個 file_id 很重要,會考


file_id 發送圖片

來用 file_id 發送圖片,只有這個方式不會限制圖片的大小,因為檔案本來就在伺服器上

把剛剛的 file_id 複製過來貼到 photo 的欄位
https://ithelp.ithome.com.tw/upload/images/20210930/20132916qBv4KcRe47.png
按下執行程式
https://ithelp.ithome.com.tw/upload/images/20210930/20132916nqzBFY0wg9.png
成功發送圖片!

這個方法比較麻煩的點就是要先用機器人取得 file_id


URL 發送圖片

這個最容易了,只要有連結就能發送圖片

把圖片的連結貼到 photo 的欄位
https://ithelp.ithome.com.tw/upload/images/20210930/20132916cUvufM3N8d.png
按下執行程式
https://ithelp.ithome.com.tw/upload/images/20210930/20132916ChyKDZFlCb.png
又成功傳送了一張圖片

就是這麼簡單


sendChatAction

https://core.telegram.org/bots/api#sendchataction
https://ithelp.ithome.com.tw/upload/images/20211001/20132916zvqsv3kLYH.png
如果你的程式會跑比較久,像是跑去撈圖片、製作圖片,那就會需要這個 API Method

實際使用會像這樣
https://ithelp.ithome.com.tw/upload/images/20211001/20132916yM3sV6Wzmx.png
https://ithelp.ithome.com.tw/upload/images/20211001/20132916JAheS1RLwf.png


結尾

剩下還有其他什麼 sendAudio sendVideo ...等,都是差不多的東西,我相信已經不需要我示範,你就能看懂要填什麼東西進去了,所以剩下的就交給你自己試試啦


上一篇
【PHP Telegram Bot】Day20 - sendMessage:發送和轉換 Markdown 訊息
下一篇
【PHP Telegram Bot】Day22 - ReplyKeyboardMarkup:讓輸入框下方出現按鈕區域
系列文
用 PHP 打造專屬於自己的 Telegram 聊天機器人吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言